import axios from 'axios'
import router from '../router'
import Qs from 'querystring'


// http.js      请求工具类



// axios的配置
axios.defaults.timeout = 5000           // 当发出请求过了5秒,还没有响应,超时
axios.defaults.withCredentials = true   // 运行跨域
// Content-type 响应头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
// 基础的url
axios.defaults.baseURL = "http://localhost:8888"


// 响应拦截器
axios.interceptors.response.use(
    // 响应成功
    response => {
        // 如果response里面的status为200,说明访问到了接口,否则错误
        // 这样做再vue文件中直接使用Promise的catch和then就可以进行指定的回调了
        if(response.status === 200) {
            return Promise.resolve(response)
        }else {
            return Promise.reject(response)
        }
    },
    // 响应失败: 没有访问到服务器,服务器内部错误,响应超时等等
    error => {
        // 如果有状态码
        if(error.response.status) {
            switch (error.response.status) {
                case 401:           // 未登录
                    router.replace({
                        path: '/',
                        query: {
                            redirect: router.currentRoute.fullPath
                        }
                    })
                    break
                case 404:           // 没找到
                    break      
            }
            return Promise.reject(error.response)
        }
    }

)



// 封装get方法
/*
    参数一: 请求地址
    参数二: 携带数据,默认为一个空对象,就是什么都不携带
*/
export function get (url,params={}) {
    return new Promise((resolve,reject) => {
        axios.get(url,{params:params})
        .then(response => {
            resolve(response.data)
        })
        .catch(error => {
            reject(error);
        })
    })
}


export function post (url,data={},config={}) {
    return new Promise((resolve,reject) => {
        axios.post(url,data,config)
        .then(response => {
            resolve(response.data)
        })
        .catch(error => {
            reject(error);
        })
    })   
}